home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 339_01 / bootdemo.c < prev    next >
Text File  |  1990-12-12  |  7KB  |  260 lines

  1. /* BOOTDEMO.C - Demo program for CTRLCLIB boot functions */
  2.  
  3. /*
  4. ** CTRLCLIB - The CTRL-C Library(Tm)
  5. ** Copyright 1990 Trendtech Corporation, Inc.
  6. ** All Rights Reserved Worldwide
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <conio.h>
  12. #include <ctype.h>
  13.  
  14. #ifdef __TURBOC__
  15. #define CLEAR_SCREEN     clrscr()
  16. #define _outtext(x)         printf("%s",(x))
  17. #define _settextposition(r,c)         gotoxy(c,r) /* yes, Microsoft has it backwards */
  18. #define _settextwindow(r1,c1,r2,c2)   window(r1,c1,r2,c2)
  19. #define getch            getche
  20. #define DoTimeDelay(x)   delay(x + 50);
  21. #else
  22. #include <graph.h>
  23. #define CLEAR_SCREEN     _clearscreen(_GCLEARSCREEN)
  24. #endif
  25.  
  26. #include <dos.h>
  27. #include <bios.h>
  28. #include <time.h>
  29. #include <string.h>
  30.  
  31. #include "ctrlc.h"   /*  <-- this header must be in every source module */
  32.                      /*      calling a CTRL-C LIBRARY function. */
  33.  
  34. #define HELL_IS_BURNING 1
  35.  
  36.  
  37. char *cr[]={"CTRLCLIB - The CTRL-C Library(Tm)",
  38.             "Copyright 1990 Trendtech Corporation, Inc.",
  39.             "All Rights Reserved Worldwide" };
  40.  
  41.  
  42. /*
  43. ===================================================================
  44. = Function Prototypes
  45. ===================================================================
  46. */
  47.  
  48. int BOOTTEST(void);
  49. void IntroScreen(void);
  50. static void IntroBoot(void);
  51.  
  52. /*
  53. ===================================================================
  54. = Function Prototypes
  55. ===================================================================
  56. */
  57.  
  58. static void footer(void);
  59.  
  60. #ifndef __TURBOC__
  61. static unsigned DoTimeDelay(int);
  62. #endif
  63.  
  64.  
  65.  
  66. /*
  67. ===================================================================
  68. = Variables
  69. ===================================================================
  70. */
  71.  
  72. #ifndef __TURBOC__
  73. struct dostime_t t, *pt;
  74. time_t tm;
  75. #endif
  76.  
  77. char s[80], *sp;
  78. unsigned int c, i, scn;
  79.  
  80. /*
  81. ===================================================================
  82. =           M A I N  
  83. ===================================================================
  84. */
  85.  
  86. void main(void)
  87.    {
  88.  
  89. #ifdef __TURBOC__
  90.    delay(0);
  91. #else
  92.    time(&tm);
  93.    srand((unsigned)tm);
  94. #endif
  95.  
  96.    IntroScreen();
  97.    IntroBoot();
  98.  
  99.    BOOTTEST();
  100.  
  101.    CLEAR_SCREEN;
  102.    exit(0);
  103.    }
  104.  
  105.  
  106. /*********************************************************************/
  107.  
  108. int BOOTTEST(void)
  109.    {
  110.  
  111.    static char far *txt[]={
  112. "\n",
  113. "                  Test of function:  SystemReset(xxxx)\n",
  114. "\n",
  115. "Run this test twice, once for cold and once for warm.  Be sure to type\n",
  116. "the characters as shown; in either UPPER or lower case.\n",
  117. "\n",
  118. "There will be a short pause just before the system resets.....\n",
  119. "\0"  }; 
  120.  
  121.    i = c = 0;
  122.    CLEAR_SCREEN;
  123.    _settextwindow(1,1,14,80);
  124.    _outtext("CTRLCLIB - The CTRL-C Library(Tm)");
  125.    _outtext(" - Copyright 1990 - Trendtech Corporation\n");
  126.    _settextposition(5,1);
  127.    do { _outtext(txt[i]); } while (*txt[++i]);
  128.    footer();
  129.  
  130.    while(HELL_IS_BURNING)
  131.       {
  132.       _settextwindow(15,1, 24,80);
  133.       _outtext("Please answer this question......\n\n\n\n");
  134.       _outtext ("       Do you want a COLD (w/diagnostics),\n");
  135.       _outtext ("                     WARM (ctrl+alt+del),\n");
  136.       _outtext ("                  or NO system reset?\n\n");
  137.       _outtext ("                                          (C/W/n/q): ");
  138.       c = getche();
  139.       c = toupper(c);
  140.       if ( c == 'C' )
  141.          { i = 1; break; }
  142.       if ( c == 'W' )
  143.          { i = 2; break; }
  144.       if ( c == 'N' || c == 'Q' )
  145.          { i = 0; break; }
  146.       }
  147.  
  148.    _settextwindow(15,1, 24,80);
  149.    _outtext("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); /* clear window */
  150.  
  151.    if (i == 1)
  152.       {
  153.       _outtext("\nThe following CTRLCLIB function will COLDBOOT your system...\n\n\n");
  154.       _outtext("                   SystemReset(COLDBOOT);\n\n\n\n");
  155.       DoTimeDelay(400);
  156.       SystemReset(COLDBOOT);   /*  <<------****** CTRL-C LIBRARY Function ****** */
  157.       }
  158.    if (i == 2)
  159.       {
  160.       _outtext("\nThe following CTRLCLIB function will WARMBOOT your system...\n\n\n");
  161.       _outtext("                   SystemReset(WARMBOOT);\n\n\n\n");
  162.       DoTimeDelay(300);
  163.       SystemReset(WARMBOOT);   /*  <<------****** CTRL-C LIBRARY Function ****** */
  164.       }
  165.  
  166.    _outtext("\n\n\n   You elected NOT to reboot your system at this time.\n\n");
  167.    _outtext("Press any key...\n\n\n");
  168.    return(getch());
  169.    }
  170.  
  171.  
  172. /*********************************************************************/
  173.  
  174. static void IntroBoot(void)
  175.    {
  176.    int i;
  177.    static char *boottext[] = {
  178. "                      ***   SYSTEM RESET TEST   ***",
  179. " ",
  180. "This test illustrates the system reset function available with CTRLCLIB.",
  181. "With the SystemReset() function, you can force either a WARM BOOT or a",
  182. "COLD BOOT.  A warm boot is equivalent to the user pressing the",
  183. "CTRL+ALT+DEL keys.  A cold boot performs complete system diagnostics",
  184. "before booting; the same as if they turned on the power switch.",
  185. " ",
  186. "To fully test CTRLCLIB's SYSTEM RESET function, you should run this test",
  187. "at lease twice,  once for the COLD boot and once for the WARM boot.",
  188. " ",
  189. "Simply answer the question on the next screen to see this function in action.",
  190. "Fear not; there's also an option to quit.\n ",
  191. "                      Press any key to continue...",
  192. "\0"  }; 
  193.  
  194.    CLEAR_SCREEN;
  195.    _settextwindow(1,1, 25,80);
  196.    _settextposition(1,1);
  197.    _outtext("CTRLCLIB - The CTRL-C Library(Tm)");
  198.    _outtext(" - Copyright 1990 - Trendtech Corporation\n");
  199.    _settextposition(4,1);
  200.  
  201.    i = 0;
  202.    while ( boottext[i][0] != '\0')
  203.       printf(" %s\n",boottext[i++]);
  204.  
  205.    getch();
  206.  
  207.    return;
  208.   }
  209.  
  210.  
  211. /*********************************************************************/
  212.  
  213. static void footer(void)
  214.    {
  215.    static char st[]=
  216. "==========================================================================";
  217.    _settextposition(14,1);
  218.    _outtext(st);
  219. #ifdef __TURBOC__
  220.    printf("\n");
  221. #endif
  222.    return;
  223.    }
  224.  
  225.  
  226. /*********************************************************************/
  227.  
  228. #ifndef __TURBOC__
  229. static unsigned DoTimeDelay(int timedelay)
  230.    {
  231.    unsigned accumhun, oldhun;
  232.  
  233.    accumhun = 0;
  234.    _dos_gettime(&t);
  235.    pt = &t;
  236.  
  237.    while(HELL_IS_BURNING)
  238.       {
  239.       oldhun = pt->hsecond;
  240.       _dos_gettime(&t);
  241.       pt = &t;
  242.       accumhun = accumhun + (((100 - oldhun) + pt->hsecond) % 100);
  243.       if (accumhun >= (unsigned)timedelay)
  244.          break;                 /* exit when time elapsed */
  245.       }
  246.  
  247.    return(accumhun);
  248.    }
  249. #endif
  250.  
  251.  
  252.  
  253.  
  254. /* --------------------------- End of Source ----------------------- */
  255.  
  256.  
  257.  
  258.  
  259.  
  260.